@echo off
chcp 65001 >nul
echo 功能：将所有文件夹移动到对应，以文件夹名前缀（中划线-前）为名称的文件夹中

setlocal EnableDelayedExpansion

:: 等待用户按键
set /p dummy=按 Enter 键开始：

:: 记录开始时间（秒）
for /f "tokens=1-4 delims=:.," %%a in ("%TIME%") do (
    set /a start_seconds=%%a*3600 + %%b*60 + %%c
    set start_milliseconds=%%d
)

:: 初始化文件夹计数
set /a folder_count=0

:: 遍历当前目录下的所有文件夹（排除 BAT 文件自身）
for /d %%D in (*) do (
    if /I not "%%D"=="%~n0" (
        set "folder_name=%%D"

        :: 判断文件夹名是否包含 "-"
        set "tmp=!folder_name:-=!"
        if not "!tmp!"=="!folder_name!" (
            echo 正在处理文件夹：%%D

            :: 提取前缀（中划线前部分）
            for /f "tokens=1 delims=-" %%A in ("!folder_name!") do (
                set "prefix=%%A"
                set "dest_dir=%~dp0!prefix!"

                :: 创建目标目录（如果不存在）
                if not exist "!dest_dir!" mkdir "!dest_dir!"

                :: 移动文件夹
                move "%%D" "!dest_dir!\" >nul

                :: 更新计数
                set /a folder_count+=1
            )
        )
    )
)

:: 记录结束时间（秒）
for /f "tokens=1-4 delims=:.," %%a in ("%TIME%") do (
    set /a end_seconds=%%a*3600 + %%b*60 + %%c
    set end_milliseconds=%%d
)

:: 计算耗时（秒）
set /a elapsed_seconds=end_seconds - start_seconds
:: 防止跨午夜导致负值
if %elapsed_seconds% lss 0 set /a elapsed_seconds+=86400

:: 输出结果
echo 处理完成，总计处理文件夹数：%folder_count%（耗时 %elapsed_seconds% 秒）
set /p dummy=按 Enter 键关闭：
exit